In some modern processors, instructions have variable lengths and form a complex instruction set capable of complex tasks that may involve multiple simpler tasks, thus the term complex instruction set computers (CISC). Micro-operations, also known as a micro-ops or uops, are simpler internal instructions that can be produced by decoding the more complex instructions, also referred to as macroinstructions. For high performance processors that use these variable length instructions, the decoding process can be costly in terms of circuitry, power consumption and time.
Some processors try to alleviate one or more of these costs through saving or caching the decoded micro-ops to reuse them if execution of their corresponding macroinstructions is repeated.
One technique is called a trace cache, where sequences of micro-ops are strung together and stored together with address information from their corresponding macro-instructions. Trace caches can be costly in terms of circuit complexity and size, but they save cycles of decoding time and increase performance.
Another technique is called a micro-op cache or microcode cache, where micro-ops are stored in cache lines (or ways) and tags associated with instruction pointers are used to lookup the micro-ops directly rather than decoding the corresponding macro-instruction each time. Some such micro-op caches are discussed, for example, in U.S. Pat. No. 6,950,903. Micro-op caches may be less costly than trace caches in circuit complexity and size, and more power efficient than fetching and decoding macro-instructions. Since the steps involved in decoding the variable length macroinstructions may be avoided, micro-op caches can potentially increase processor performance, but synchronization between sequences of decoded macro-instructions and cached micro-ops can be complicated and may degrade those performance increases.
To date, the range of effective techniques for employing saved or cached micro-ops to improve processing of instructions and reduce costs in terms of circuit complexity and power consumption in a processor have not been fully explored.